package be.vdab.servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import be.vdab.dao.ReservatieDAO;
import be.vdab.dao.VoorstellingDAO;
import be.vdab.entities.Klanten;
import be.vdab.entities.Reservatie;

/**
 * Servlet implementation class GedaneReserveringenServlet
 */
@WebServlet("/gedanereserveringen.htm")
public class GedaneReserveringenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private final String VIEW = "/WEB-INF/JSP/gedaneReserveringen.jsp";
	HttpSession session = null;
	Map<Long, Long> mandje = null;
	VoorstellingDAO voorstellingDAO = VoorstellingDAO.getInstance();
	ReservatieDAO reservatieDAO = new ReservatieDAO();
	Klanten klant = null;

	@SuppressWarnings("unchecked")
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		session = request.getSession();
		if (session != null) {
			mandje = (Map<Long, Long>) session.getAttribute("mandje");
			klant = (Klanten) session.getAttribute("klant");
			if (mandje != null) {
				Map<Klanten, Reservatie> gedaneReservaties = new HashMap<Klanten, Reservatie>();
				List<Reservatie> reservaties = new ArrayList<Reservatie>();
				List<Reservatie> gelukteReservaties = new ArrayList<Reservatie>();
				List<Reservatie> mislukteReservaties = new ArrayList<Reservatie>();
				Set<Long> reservatieNummers = mandje.keySet();
				for (Long nr : reservatieNummers) {
					reservaties.add(new Reservatie(voorstellingDAO
							.zoekVoorstelling(nr), mandje.get(nr)));
					gedaneReservaties.put(klant, new Reservatie(voorstellingDAO
							.zoekVoorstelling(nr), mandje.get(nr)));
				}
				for (Reservatie gelukteReservatie : reservaties) {
					if (gelukteReservatie.getPlaatsen() <= gelukteReservatie
							.getVoorstelling().getVrijePlaatsen()) {
						gelukteReservaties.add(gelukteReservatie);
					} else {
						mislukteReservaties.add(gelukteReservatie);
					}
					
					for(Reservatie reservatie : gelukteReservaties){
						reservatieDAO.voegReservatieToe(reservatie, klant);
					}					
					
					request.setAttribute("gelukteReservaties", gelukteReservaties);
					request.setAttribute("mislukteReservaties", mislukteReservaties);
				}
			}
			session.removeAttribute("mandje");
		}

		request.getRequestDispatcher(VIEW).forward(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
